package com.xbongbong.pro.message.service;


import com.xbongbong.message.domain.entity.PushEntity;
import com.xbongbong.message.domain.entity.PushLinkEntity;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.message.enums.RefEntityEnum;
import com.xbongbong.pro.message.pojo.dto.MessageCountDTO;
import com.xbongbong.pro.message.pojo.dto.MessageReadAllDTO;
import com.xbongbong.pro.message.pojo.dto.MessageReadDTO;
import com.xbongbong.pro.message.pojo.vo.MessageCountVO;
import com.xbongbong.pro.message.pojo.vo.MessageReadAllVO;
import com.xbongbong.pro.message.pojo.vo.MessageReadVO;

import java.util.ArrayList;
import java.util.List;

/**
 * Description: PushLink相关service
 * @author 魏荣杰
 * @date 2019/1/6 1:16
 * @version v1.0
 * @since v1.0
 */
public interface PushLinkService {

    /**
     *  解析 推送消息实体 插入推送消息关联表
     * @param push
     */
    void insert(PushEntity push);

    /**
     * 解析 推送消息实体队列 插入推送消息关联表
     * @param pushList 推送消息实体队列
     */
    void insertBatch(List<PushEntity> pushList);

    /**
     * 解析 推送消息实体 PushEntity 插入推送消息关联队列
     * @param push 消息
     * @param pushLinkList 消息关联队列
     * @return 插入的消息关联队列
     */
    ArrayList<PushLinkEntity> insertPush2PushLinkList(PushEntity push, ArrayList<PushLinkEntity> pushLinkList);

    /**
     * Description: 根据 pushId 查找推送的信息实体
     * @param pushIdInList 消息Push表ID
     * @param corpid 公司id
     * @return 消息列表
     */
    List<PushEntity> findPushList(List<Long> pushIdInList, String corpid);

    /**
     * Description: 获取用户未读消息总数
     * @param messageCountDTO
     * @return  符合查询条件的查询总数
     * @throws
     */
    MessageCountVO countUnread(MessageCountDTO messageCountDTO) throws XbbException;

    /**
     * 将消息Id队列的消息关联表设置为已读
     *
     * @param messageReadDTO 消息已读的DTO
     * @return MessageReadVO 消息已读的VO
     * @throws XbbException XbbException
     */
    MessageReadVO readPushList(MessageReadDTO messageReadDTO) throws XbbException;

    /**
     * 删除消息Id队列的消息关联表
     * @param pushLinkIdList 消息关联列表
     */
    void deletePushList(List<Integer> pushLinkIdList, String corpid);

    /**
     * 用户脱离团队后删除未发送的消息
     * @param corpid        公司id
     * @param userId        用户id
     * @param refEntityEnum 对象类型
     * @param refId         对象id
     */
    void apartTeam2DeleteMessage(String corpid, String userId, RefEntityEnum refEntityEnum, Integer refId);

    /**
     * 用户脱离团队后删除未发送的消息
     * @param corpid        公司id
     * @param userId        用户id
     * @param refEntityEnum 对象类型
     * @param refIdIn       对象id队列
     */
    void apartTeam2DeleteMessage(String corpid, String userId, RefEntityEnum refEntityEnum, List<Integer> refIdIn);

    /**
     * Description: 标记用户全部未读信息为已读
     * @param messageReadAllDTO
     * @return MessageReadAllVO
     * @throws XbbException 应用不存在
     */
    MessageReadAllVO readAllPushLink(MessageReadAllDTO messageReadAllDTO) throws XbbException;

}
